package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.DTO.property.DeviceMediaRemoveWallBindDeviceDTO;
import com.itlong.cloud.POJO.DTO.property.DeviceMediaWallForCompatibilityDTO;
import com.itlong.cloud.POJO.PO.DeviceMediaWallPO;
import com.itlong.cloud.POJO.VO.property.DeviceMediaBindDeviceVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *   围墙机多媒体服务设备信息持久层对象
 * </desc>
 *
 * @createDate 2017/9/21
 */
@Mapper
@Repository
public interface IDeviceMediaWallDao extends IAbstractBaseDao<DeviceMediaWallPO> {
    /**
     * <desc>
     *    保存单个围墙机多媒体服务设备信息
     * </desc>
     *
     * @param params 保存的参数
     * @return 受影响的行数
     * @author Lix
     * @createDate 2017-10-19
     */
    Integer save(Map<String,Object> params);


    /**
     * <desc>
     *      批量保存多媒体资源-围墙机信息
     * </desc>
     *
     * @param params 待保存的多媒体资源-围墙机信息
     * @return 受影响的行数
     * @author LouisLewis
     * @createDate 2017-11- 20
     */
    Integer batchSave(List<Map<String, Object>> params);

    /**
     * <desc>
     *      修改单个围墙机多媒体服务设备信息【根据多媒体Id（mediaId）】
     * </desc>
     *
     * @param params 保存的参数
     * @return 受影响的行数
     * @author Lix
     * @createDate 2017-10-19
     */
    Integer update(Map<String,Object> params);

    /**
     * <desc>
     *    逻辑删除指定围墙机多媒体服务信息【根据多媒体Id】
     * </desc>
     *
     * @param  mediaId 多媒体Id
     * @return 受影响的行数
     * @author Lix
     @createDate 2017-10-23
     */
    Integer removeOne(@Param("mediaId")java.lang.String mediaId);


    /**
     * <desc>
     *    查询指定的围墙机多媒体资源绑定的设备信息列表
     * </desc>
     *
     * @param  mediaId  多媒体Id
     * @return  设备信息列表
     * @author LouisLewis
     * @createDate 2017-11-21
     */
    List<DeviceMediaBindDeviceVO> getOneMediaWallInfo(@Param("mediaId") String mediaId);


    /**
     * <desc>
     *    删除围墙机多媒体资源-与指定设备的关系.
     * </desc>
     *
     * @param deviceMediaRemoveWallBindDeviceDTO   需要删除的围墙机多媒体资源关联的部分设备关系.
     * @return 受影响的行数
     * @author LewisLouis
     * @createDate 2017-11-23
     */
    Integer removeMediaWallRelation(DeviceMediaRemoveWallBindDeviceDTO deviceMediaRemoveWallBindDeviceDTO);


    /**
     * <desc>
     *    获取指定围墙机多媒体服务信息数量【根据多媒体Id】
     * </desc>
     *
     * @param  mediaId 多媒体Id
     * @return 受影响的行数
     * @author Lix
     @createDate 2017-10-23
     */
    Integer getMediaIdCount(@Param("mediaId")java.lang.String mediaId);

    /**
     * <desc>
     *     获取所有旧多媒体资源绑定围墙机数据
     * </desc>
     *
     * @return 旧多媒体资源绑定围墙机数据
     * @author wangzhi
     * @createDate 2018-04-19
     */
    List<DeviceMediaWallForCompatibilityDTO> getOldDeviceMediaWall();

    /**
     * <desc>
     *     使用deviceUnique获取云对讲设备绑定的楼栋id
     * </desc>
     *
     * @return 云对讲设备绑定的楼栋id
     * @author wangzhi
     * @createDate 2018-04-19
     */
    List<String> getAllIntercomBuildIdByDeviceUnique(String deviceUnique);

    /**
     * <desc>
     *     删除原来buildId为null的数据
     * </desc>
     *
     * @return 删除的行数
     * @author wangzhi
     * @createDate 2018-04-19
     */
    Integer removeMediaWallByBuildIdNull();

    /**
     * <desc>
     *     查出围墙机所有错误数据
     * </desc>
     *
     * @return
     * @author wangzhi
     * @createDate 2018-04-20
     */
    List<DeviceMediaWallPO> getAllWrongWallData();

    /**
     * <desc>
     *     删除围墙机所有错误数据
     * </desc>
     *
     * @param wallIds 围墙机待删除错误数据的主键id集合
     * @return
     * @author wangzhi
     * @createDate 2018-04-20
     */
    Integer removeWrongWallData(@Param("wallIds") List<Integer> wallIds);

}
